#define _CRT_SECURE_NO_WARNINGS 1
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <string>
#include <cstring>
#include <cmath>
#include <vector>
#include <sstream>
#include <deque>
#include <set>
#include <queue>
using namespace std;
#define ll long long

//int t, n,num2,num3;
//string s;
//ll sum;
//int main() {
//	ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
//	cin >> t;
//	while (t--) {
//		cin >> s;
//		bool flag = true;
//		num2 = 0, num3 = 0;
//		n = s.size();
//		sum = 0;
//		for (int i = 0; i < n; i++)
//		{
//			sum += s[i] - '0';
//			if (s[i] - '0' == 2 && num2 < 8) num2++;
//			if (s[i] - '0' == 3 && num3 < 8) num3++;
//		}
//		if (!sum)
//			flag = false;
//		for (int i = 0; i <= num2; i++)
//			for (int j = 0; j <= num3; j++)
//			{
//				ll tmp =sum + i * 2 + j * 6;
//				if (tmp % 9 == 0)
//					flag = false;
//			}
//		if (flag)
//			cout << "NO" << '\n';
//		else cout << "YES" << '\n';
//	}
//	return 0;
//}

//int t, n, a[200010];
//string s;
//int main() {
//	ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
//	cin >> t;
//	while (t--) {
//		cin >> s;
//		n = s.size();
//		for (int i = 0; i <n; i++) a[i] = s[i] - '0';
//		for (int i = 1; i <n; i++)
//		{
//			if (!a[i]) continue;
//			int now = a[i];
//			int j;
//			for ( j = i-1; j >=0; j--)
//			{
//				if (a[j] < now - i + j)
//					a[j + 1] = a[j];
//				else break;
//			}
//			a[j + 1] = now - i + j + 1;
//		}
//		for (int i = 0; i < n; i++) cout << a[i];
//		cout << '\n';
//	}
//	return 0;
//}

//int n;
//char a[5][1000010];
//
//bool check(int j) {
//	if (a[2][j - 1] == 'x' || a[2][j] == 'x' || a[2][j + 1] == 'x')
//		return true;
//	else return false;
//}
//int main() {
//	ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
//	cin >> n;
//	bool flag = true;
//	for (int i = 1; i <= 2; i++)
//		for (int j = 1; j <= n; j++)
//		{
//			cin >> a[i][j];
//		}
//	a[1][n + 1] = '.';
//	a[2][n + 1] = '.';
//	for (int j = 1; j <= n; j++) {
//		if (a[1][j]=='x')
//		{
//			if (check(j)) {
//				flag = false;
//				break;
//			}
//		}
//	 }
//	if (flag) cout << "YES" << '\n';
//	else cout << "NO" << '\n';
//
//	return 0;
//}


//int m, b[300010],n;
//int main() {
//	ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
//	cin >> m;
//	n = 0;
//	for (int i = 1; i <= m; i++)
//	{
//		cin >> b[i];
//		if (b[i] == -1)
//			n++;
//	}
//	vector< vector<int> >a(n);
//	for (int i = 1; i <= m; i++)
//	{
//
//	}
//	cout << n << '\n';
//	return 0;
//}


//int main()
//{
//	ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
//	int n = 0, a = 0, b = 0;
//	int x = 0, y = 0;
//	cin >> n >> a >> b;
//	if (a <= n / 2)
//	{
//		for (int i = 1; i < n; i++)
//		{
//			cout << "U";
//		}
//		x = 1;
//	}
//	else
//	{
//		for (int i = 1; i < n; i++)
//		{
//			cout << "D";
//		}
//		x = n;
//	}
//	if (b <= n / 2)
//	{
//		for (int i = 1; i < n; i++)
//		{
//			cout << "L";
//		}
//		y = 1;
//	}
//	else
//	{
//		for (int i = 1; i < n; i++)
//		{
//			cout << "R";
//		}
//		y = n;
//	}
//	if (x == 1 && y == 1)
//	{
//		for (int i = 1; i <= a - 1; i++)
//		{
//			cout << "D";
//		}
//		for (int i = 1; i <= b - 1; i++)
//		{
//			cout << "R";
//		}
//	}
//	if (x == n && y == 1)
//	{
//		for (int i = 1; i <= n - a; i++)
//		{
//			cout << "U";
//		}
//		for (int i = 1; i <= b - 1; i++)
//		{
//			cout << "R";
//		}
//	}
//	if (x == 1 && y == n)
//	{
//		for (int i = 1; i <= a - 1; i++)
//		{
//			cout << "D";
//		}
//		for (int i = 1; i <= n - b; i++)
//		{
//			cout << "L";
//		}
//	}
//	if (x == n && y == n)
//	{
//		for (int i = 1; i <= n - a; i++)
//		{
//			cout << "U";
//		}
//		for (int i = 1; i <= n - b; i++)
//		{
//			cout << "L";
//		}
//	}
//}

//int m,b[300010],n;
//int main() {
//	ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
//	cin >> m;
//	for (int i = 1; i <= m; i++)
//	{
//		cin >> b[i];
//		if (b[i] == -1)
//			n++;
//	}
//	vector< vector<int> >a(n);
//	set<int>c;
//	int j = 0;
//	for (int i = 1; i <= m; i++)
//	{
//		if (j < n) {
//			a[j].push_back(b[i]);
//			j++;
//			
//		}
//		else {
//			if (a[j % n].back() == -1) {
//				c.erase(j % n);
//				n = c.size();
//			}
//			a[c].push_back(b[i]);
//			j++;
//		}
//	}
//	cout << n << '\n';
//	for (int i = 0; i < n; i++)
//	{
//		int k = a[i].size();
//		cout << k - 1 << ' ';
//		for (int z = 0; z < k-1; z++)
//		{
//			cout << a[i][z] << ' ';
//		}
//		cout << '\n';
//	}
//	return 0;
//}
//
//
//
//using namespace std;
//
int main() {
	ios::sync_with_stdio(0);
	cin.tie(nullptr);
	int m;
	cin >> m;
	vector<int> b(m);
	for (int i = 0; i < m; i++) {
		cin >> b[i];
	}

	int n = 0;
	for (int i = 0; i < m; i++) {
		if (b[i] == -1) {
			n++;
		}
	}

	vector<vector<int>> a(n);
	queue<int> q;

	for (int i = 0; i < n; i++) {
		q.push(i);
	}

	for (int i = 0; i < m; i++) {
		int idx = q.front();
		q.pop();
		a[idx].push_back(b[i]);
		if (b[i] != -1) {
			q.push(idx);
		}
	}

	cout << n << '\n';
	for (int i = 0; i < n; i++) {
		int k = a[i].size();
		cout << k - 1 << ' ';
		for (int z = 0; z < k - 1; z++) {
			cout << a[i][z] << ' ';
		}
		cout << '\n';
	}

	return 0;
}
//int main()
//{
//    int m;
//    cin >> m;
//    queue<int> q;
//    int k = 0;
//    for (int i = 1; i <= m; i++)
//    {
//        int temp;
//        cin >> temp;
//        q.push(temp);
//        if (temp == -1)
//        {
//            k++;
//        }
//    }
//    cout << k << endl;
//
//    vector<queue<int>> b(k + 5);
//    for (int i = 1; i <= k + 4; i++)
//    {
//        b[i].push(0);
//    }
//    while (!q.empty())
//    {
//        int cnt = 0;
//        for (int i = 1; i <= k; i++)
//        {
//            int temp1 = i;
//            int temp = q.front();
//            q.pop();
//
//            while (b[temp1].back() == -1)
//            {
//                temp1++;
//            }
//            b[temp1].push(temp);
//            if (temp == -1)
//                cnt++;
//        }
//        if (cnt)
//            k -= cnt;
//    }
//
//    for (int i = 1; i <= k; i++)
//    {
//        while (!b[i].empty())
//        {
//            cout << b[i].front() << " ";
//            b[i].pop();
//        }
//    }
//
//    return 0;
//}